package com.suyang.syt.service.impl;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.suyang.syt.dao.interfaces.BugDao;
import com.suyang.syt.dao.interfaces.BugReplyDao;
import com.suyang.syt.dao.interfaces.BugTypeDao;
import com.suyang.syt.model.Bug;
import com.suyang.syt.model.BugReply;
import com.suyang.syt.model.BugType;
import com.suyang.syt.model.dto.AjaxObj;
import com.suyang.syt.model.dto.BugDTO;
import com.suyang.syt.model.dto.PagerEasyUI;
import com.suyang.syt.service.interfaces.BugService;
import com.suyang.syt.util.EmptyUtil;
import com.suyang.syt.util.PinyinUtil;

@Service
public class BugServiceImpl implements BugService {
	@Autowired
	private BugDao bugDao;
	@Autowired
	private BugTypeDao bugTypeDao;
	@Autowired
	private BugReplyDao bugReplyDao;

	@Override
	public PagerEasyUI<BugDTO> listByEasyUI(int page, int rows, String sort, String order, String createDate1, String createDate2, String checkName, String checkBtid, String checkStatus) throws Exception {
		StringBuilder hql = new StringBuilder(" from Bug b where 1=1 ");
		if (EmptyUtil.isNotEmpty(createDate1)) {
			hql.append(" and b.createTime >= '").append(createDate1).append("' ");
		}
		if (EmptyUtil.isNotEmpty(createDate2)) {
			hql.append(" and b.createTime <= '").append(createDate2).append("' ");
		}
		if (EmptyUtil.isNotEmpty(checkName)) {
			hql.append(" and b.name like '%").append(checkName).append("%' ");
		}
		if (EmptyUtil.isNotEmpty(checkBtid)) {
			hql.append(" and b.btid = ").append(Long.parseLong(checkBtid));
		}
		if (EmptyUtil.isNotEmpty(checkStatus)) {
			hql.append(" and b.status = ").append(Long.parseLong(checkStatus));
		}
		if (EmptyUtil.isNotEmpty(sort)) {
			hql.append(" order by b.").append(sort);
		}
		if (EmptyUtil.isNotEmpty(order)) {
			hql.append(" ").append(order);
		}
		PagerEasyUI<BugDTO> easyUIPager = new PagerEasyUI<BugDTO>();
		List<Bug> bugs = bugDao.findByEasyUI(hql.toString(), page, rows);
		List<BugDTO> BugDTOS = new ArrayList<BugDTO>();
		BugDTO bugDTO = null;
		for (Bug bug : bugs) {
			bugDTO = new BugDTO(bug);
			bugDTO.setListBugReplys(bugReplyDao.list("from BugReply br where br.bid=?", bug.getId()));
			BugDTOS.add(bugDTO);
		}
		easyUIPager.setRows(BugDTOS);
		easyUIPager.setTotal((Long) bugDao.queryByHql(" select count(*) " + hql.substring(0, hql.indexOf("order by"))));
		return easyUIPager;
	}

	@Override
	public AjaxObj add(BugDTO bugDTO) throws Exception {
		if (bugDTO != null && EmptyUtil.isNotEmpty(bugDTO.getName())) {
			Bug bug = new Bug();
			if (bugDTO.getBtid() < 1) {
				return new AjaxObj(0, "BUG类型ID错误!");
			}
			BugType bugType = bugTypeDao.load(bugDTO.getBtid());
			if (bugType == null) {
				return new AjaxObj(0, "BUG类型加载错误,请联系管理员!");
			}
			bug.setBtid(bugDTO.getBtid());
			bug.setBtname(bugType.getName());
			bug.setNote(bugDTO.getNote());
			bug.setCreateName(bugDTO.getCreateName());
			bug.setCreateTime(bugDTO.getCreateTime());
			bug.setJianpin(PinyinUtil.strFirst2Pinyin(bugDTO.getName().toUpperCase()));
			bug.setQuanpin(PinyinUtil.str2Pinyin(bugDTO.getName(), null));
			bug.setName(bugDTO.getName());
			bug.setOrderIndex(bugDTO.getOrderIndex());
			bug.setStatus(bugDTO.getStatus());
			bugDao.add(bug);
			return new AjaxObj(1, "BUG添加成功!");
		}
		return new AjaxObj(0, "BUG添加失败!");
	}

	@Override
	public AjaxObj deletes(String ids) throws Exception {
		List<BugReply> list = bugReplyDao.findByIds(ids);
		if (EmptyUtil.isNotEmpty(list)) {
			bugReplyDao.deleteByIds(ids);
		}
		bugDao.deleteByIds(ids);
		return new AjaxObj(1, "删除成功!");
	}

	@Override
	public AjaxObj update(BugDTO bugDTO) throws Exception {
		if (bugDTO != null && EmptyUtil.isNotEmpty(bugDTO.getName())) {
			Bug bug = bugDao.load(bugDTO.getId());
			if (bug == null) {
				return new AjaxObj(0, "加载BUG信息失败,请联系管理员!");
			}
			bug.setBtid(bugDTO.getBtid());
			bug.setModifyName(bugDTO.getModifyName());
			bug.setModifyTime(bugDTO.getModifyTime());
			bug.setName(bugDTO.getName());
			bug.setOrderIndex(bugDTO.getOrderIndex());
			bug.setStatus(bugDTO.getStatus());
			bug.setJianpin(PinyinUtil.strFirst2Pinyin(bugDTO.getName().toUpperCase()));
			bug.setQuanpin(PinyinUtil.str2Pinyin(bugDTO.getName(), null));
			bug.setNote(bugDTO.getNote());
			bugDao.update(bug);
			if (EmptyUtil.isNotEmpty(bugDTO.getBugReplys())) {
				BugReply bugReply = new BugReply();
				bugReply.setBid(bugDTO.getId());
				bugReply.setCreateName(bugDTO.getModifyName());
				bugReply.setCreateTime(bugDTO.getModifyTime());
				bugReply.setReply(bugDTO.getBugReplys());
				bugReplyDao.add(bugReply);
			}
			return new AjaxObj(1, "更新成功！");
		}
		return new AjaxObj(0, "更新失败！");
	}

}
